

package com.lekang.system.service;

import java.util.List;
import com.lekang.system.domain.CheckInManagement;
import com.lekang.system.domain.dto.CheckInWorkflowDTO;

/**
 * 入住管理Service接口 
 * 
 * 
 * @author 刘卓
 * @date 2025-10-13
 */
public interface ICheckInManagementService 
{
    /**
     * 查询入住管理
     * 
     * @param id 入住管理主键
     * @return 入住管理
     */
    public CheckInManagement selectCheckInManagementById(Long id);

    /**
     * 查询入住管理列表
     * 
     * @param checkInManagement 入住管理
     * @return 入住管理集合
     */
    public List<CheckInManagement> selectCheckInManagementList(CheckInManagement checkInManagement);

    /**
     * 新增入住管理
     * 
     * @param checkInManagement 入住管理
     * @return 结果
     */
    public int insertCheckInManagement(CheckInManagement checkInManagement);

    /**
     * 修改入住管理
     * 
     * @param checkInManagement 入住管理
     * @return 结果
     */
    public int updateCheckInManagement(CheckInManagement checkInManagement);

    /**
     * 批量删除入住管理
     * 
     * @param ids 需要删除的入住管理主键集合
     * @return 结果
     */
    public int deleteCheckInManagementByIds(Long[] ids);

    /**
     * 删除入住管理信息
     * 
     * @param id 入住管理主键
     * @return 结果
     */
    public int deleteCheckInManagementById(Long id);
    
    /**
     * 完整入住申请流程 - 多表事务插入
     * 同时插入：老人表、入住管理表、家人表、合同表、床表
     * 
     * @param dto 入住申请数据
     * @return 入住管理ID
     */
    public Long completeCheckInApplication(CheckInWorkflowDTO dto);
    
    /**
     * 启动入住申请工作流
     * 
     * @param checkInManagementId 入住管理ID
     * @return 流程实例ID
     */
    public String startCheckInWorkflow(Long checkInManagementId);
    
    /**
     * 处理工作流任务
     * 
     * @param taskId 任务ID
     * @param opinion 审批意见
     * @param auditStatus 审批状态（1:通过，2:拒绝）
     * @param checkInManagementId 业务ID
     * @param stepNo 步骤号（前端传递）
     */
    public void handleWorkflowTask(String taskId, String opinion, Long auditStatus, Long checkInManagementId, Long stepNo);
    
    /**
     * 签约并落合同
     * 完成签约办理，保存完整的入住管理和合同数据
     * 
     * @param checkInManagementId 入住管理ID
     * @param dto 签约数据
     */
    public void finalizeCheckInContract(Long checkInManagementId, CheckInWorkflowDTO dto);
    
    /**
     * 根据业务ID获取当前活动的Activiti任务ID
     * 
     * @param businessId 业务ID（入住管理ID）
     * @return Activiti任务ID，如果没有活动任务则返回null
     */
    public String getCurrentActivitiTaskId(Long businessId);
}
